/*
 * 串口总线舵机示例代码
 * ---------------------------------------------------
 * ---------------------------------------------------
 */
#ifndef __FASHION_STAR_USART_SERVO_EXAMPLE_H
#define __FASHION_STAR_USART_SERVO_EXAMPLE_H

// 导入系统依赖库
#include "fashion_star_uart_servo.h"

// 变量定义
extern Usart_DataTypeDef *servo_usart;

/* 舵机通讯检测 */
void FSUSExample_PingServo(void);

/* 控制单个舵机的角度 */
void FSUSExample_SetServoAngle(void);

/* 控制多个舵机的角度 */
void FSUSExample_SetNServoAngle(void);

/* 设置舵机角度(多圈模式) */
void FSUSExample_SetServoAngleMTurn(void);

/* 舵机阻尼模式与角度回传 */
void FSUSExample_SetServoDamping(void);

/* 用户自定义数据-重置 */
void FSUSExample_ResetData(void);

/* 用户自定义数据-读取 */
void FSUSExample_ReadData(void);

/* 用户自定义数据-写入 */
void FSUSExample_WriteData(void);

/* 同步命令 */
void demo_SYNC(void);

/* 数据监控 */
void demo_MONTIOR(void);

/* 控制模式停止状态 */
void demo_StopOnControlMode(void);

/* 开启停止异步命令 */
void demo_Begin_EndAsync(void);
#endif

/*
 * 轮式控制模式
 * speed单位 °/s
 */
FSUS_STATUS FSUS_WheelMove(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t method, uint16_t speed, uint16_t value);

// 轮式模式, 舵机停止转动
FSUS_STATUS FSUS_WheelStop(Usart_DataTypeDef *usart, uint8_t servo_id);
// 轮式模式 不停的旋转
FSUS_STATUS FSUS_WheelKeepMove(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t is_cw, uint16_t speed);

// 轮式模式 按照特定的速度旋转特定的时间
FSUS_STATUS FSUS_WheelMoveTime(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t is_cw, uint16_t speed, uint16_t nTime);

// 轮式模式 旋转特定的圈数
FSUS_STATUS FSUS_WheelMoveNCircle(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t is_cw, uint16_t speed, uint16_t nCircle);


/* 轮式模式控制(一直旋转) */
void FSUSExample_WheelKeepMove(void);
// 估计旋转圈数所需要花费的时间
uint16_t FSUSExample_EstimateTimeMs(uint16_t n_circle, uint16_t speed);

/* 轮式模式控制(定圈) */
// 舵机的旋转方向(顺1下，逆时针0上)
void FSUSExample_WheelMoveNCircle(uint8_t is_cw ,uint16_t n_circle);
/* 轮式制模式(定时) */
void FSUSExample_WheelMoveNTime(void);
